﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Ferreteria.Forms.GestionClientes
{
    public partial class FrmResumendeDeudas : Form
    {
        DisancoEntities context;
        decimal deudatotal;
        DataTable dtDeudasImpagas;
        DateTime fechaPrimCompra;
        DateTime fechaUltCompra;
        DateTime fechalimite;
        string categoriausuario;
        int diasacalcular;
        
        public FrmResumendeDeudas(string categusuario)
        {
            InitializeComponent();
            context = new DisancoEntities(Ferreteria.Clases.Constantes.cadenaConexion);
            categoriausuario = categusuario;
            //Creo el Datatable 
            dtDeudasImpagas = new DataTable();
            dtDeudasImpagas.Columns.Add("idcliente");
            dtDeudasImpagas.Columns.Add("Cliente");
            //dtDeudasImpagas.Columns.Add("Fecha Compra Primera");
            dtDeudasImpagas.Columns.Add("Fecha Ultima Compra");
            dtDeudasImpagas.Columns.Add("Monto Adeudado");
           
            cmbDiasCalculo.Items.Add("30");
            cmbDiasCalculo.Items.Add("45");
            cmbDiasCalculo.Items.Add("60");
            cmbDiasCalculo.Items.Add("90");
            cmbDiasCalculo.Items.Add("120");
            cmbDiasCalculo.Items.Add("180");
            cmbDiasCalculo.Items.Add("260");
            cmbDiasCalculo.Items.Add("365");
            cmbDiasCalculo.Items.Add("0");
            cmbDiasCalculo.SelectedIndex = 0;
   
            
            CargarGrillaDeudas();
       
        }

        private void CargarGrillaDeudas()
        {
            diasacalcular = Convert.ToInt32(cmbDiasCalculo.SelectedItem);

            fechalimite = DateTime.Now.AddDays(-diasacalcular);

            //dgvResumenDeudas.Rows.Clear();

            //busco las cuentas impagas
            var cuentasImpagas = from cuenta in context.Cuentas
                                 where cuenta.cuenta_pagado < cuenta.cuenta_monto
                                 & cuenta.cuenta_fecha < fechalimite 
                                                                
                                 select cuenta;

            dtDeudasImpagas.Rows.Clear();
            //acumulo las cuentas de un cliente
            foreach (var cli in context.Clientes)
            {
                deudatotal = 0;
                fechaPrimCompra = DateTime.Now;
                fechaUltCompra = DateTime.MinValue;
                foreach (var cuenta in cuentasImpagas)
                {
                    if (cuenta.cliente_id == cli.cliente_id)
                    {
                       
                            if ((cuenta.Ventas.Count > 0 && cuenta.Ventas.ElementAt(0).venta_estado != Clases.Estado.Anulada) || (cuenta.VentasAdicionales.Count > 0 && cuenta.VentasAdicionales.ElementAt(0).va_estado != Clases.Estado.Anulada))
                        {
                            deudatotal = deudatotal + (cuenta.cuenta_monto - cuenta.cuenta_pagado);
                            if (cuenta.cuenta_fecha < fechaPrimCompra)
                                fechaPrimCompra = cuenta.cuenta_fecha;
                            if (cuenta.cuenta_fecha > fechaUltCompra)
                                fechaUltCompra = cuenta.cuenta_fecha;
                        }
                    }
                }
            
                DataRow lineacli = dtDeudasImpagas.NewRow();
                lineacli["idcliente"] = cli.cliente_id;
                lineacli["Cliente"] = cli.cliente_nombre;
                //lineacli["Fecha Compra Primera"] = fechaPrimCompra.Date.ToShortDateString();
                lineacli["Fecha Ultima Compra"] = fechaUltCompra.Date.ToShortDateString();
                lineacli["Monto Adeudado"] = "$ " + Math.Round(deudatotal, 2);
                dtDeudasImpagas.Rows.Add(lineacli);

            }
            dgvResumenDeudas.DataSource = dtDeudasImpagas;
            dgvResumenDeudas.Columns["idcliente"].Visible = false;

            dgvResumenDeudas.RowsDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvResumenDeudas.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            dgvResumenDeudas.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
        }

        private void cmbDiasCalculo_SelectedIndexChanged(object sender, EventArgs e)
        {
           
            CargarGrillaDeudas();
        }

        private void bttnVerDetalle_Click(object sender, EventArgs e)
        {
            int clienteId = Convert.ToInt32(dgvResumenDeudas.CurrentRow.Cells["idcliente"].Value);

            frmVerInformacionCliente info = new frmVerInformacionCliente(clienteId, categoriausuario, diasacalcular);
            
            info.ShowDialog();
        }
    }
}
